/**
 * 文档智能摘要工具 - 设置页面JavaScript
 * 处理设置的加载、保存和重置功能
 */

// 当前设置状态
let currentSettings = {};

// 等待DOM加载完成
document.addEventListener('DOMContentLoaded', function() {
    // 加载当前设置
    loadSettings();
    
    // 初始化设置表单
    initSettingsForm();
    
    // 初始化文件格式管理
    initFormatsManager();
    
    // 初始化比例滑块
    initRatioSlider();
    
    // 初始化保存和重置按钮
    initButtons();
});

/**
 * 加载当前设置
 */
async function loadSettings() {
    try {
        const response = await fetch('/api/settings');
        const data = await response.json();
        
        if (data.success) {
            currentSettings = data.settings;
            populateForm(currentSettings);
        } else {
            throw new Error(data.error || '加载设置失败');
        }
    } catch (error) {
        console.error('加载设置错误:', error);
        showError(error.message);
    }
}

/**
 * 填充设置表单
 * @param {Object} settings - 设置对象
 */
function populateForm(settings) {
    // 界面设置
    document.getElementById('language').value = settings.语言 || 'zh';
    document.getElementById('theme').value = settings.主题 || 'light';
    
    // 摘要设置
    document.getElementById('algorithm').value = settings.摘要.算法 || 'extractive';
    document.getElementById('ratio').value = (settings.摘要.默认比例 || 0.3) * 100;
    document.getElementById('ratioValue').textContent = Math.round((settings.摘要.默认比例 || 0.3) * 100) + '%';
    document.getElementById('keywordsCount').value = settings.摘要.关键词数量 || 10;
    
    // 文档设置
    document.getElementById('maxFileSize').value = settings.文档.最大大小 || 10;
    updateFormatsContainer(settings.文档.支持格式 || []);
    
    // 历史记录设置
    document.getElementById('autoSave').checked = settings.历史.自动保存 !== false;
    document.getElementById('maxCount').value = settings.历史.最大数量 || 100;
    
    // Web服务设置
    document.getElementById('host').value = settings.web.主机 || '127.0.0.1';
    document.getElementById('port').value = settings.web.端口 || 8080;
}

/**
 * 初始化设置表单
 */
function initSettingsForm() {
    const form = document.getElementById('settingsForm');
    
    // 监听表单变化
    form.addEventListener('change', function() {
        // 启用保存按钮
        document.getElementById('saveSettings').disabled = false;
    });
}

/**
 * 初始化文件格式管理
 */
function initFormatsManager() {
    const addButton = document.getElementById('addFormatButton');
    const newFormatInput = document.getElementById('newFormat');
    
    addButton.addEventListener('click', function() {
        const format = newFormatInput.value.trim().toLowerCase();
        
        if (!format) {
            showError('请输入文件格式');
            return;
        }
        
        if (!format.match(/^[a-z0-9]+$/)) {
            showError('文件格式只能包含字母和数字');
            return;
        }
        
        const formats = getCurrentFormats();
        if (formats.includes(format)) {
            showError('该文件格式已存在');
            return;
        }
        
        formats.push(format);
        updateFormatsContainer(formats);
        newFormatInput.value = '';
        
        // 启用保存按钮
        document.getElementById('saveSettings').disabled = false;
    });
}

/**
 * 获取当前支持的文件格式
 * @returns {string[]} 文件格式数组
 */
function getCurrentFormats() {
    const container = document.getElementById('formatsContainer');
    return Array.from(container.children).map(badge => 
        badge.textContent.replace('×', '').trim()
    );
}

/**
 * 更新文件格式容器
 * @param {string[]} formats - 文件格式数组
 */
function updateFormatsContainer(formats) {
    const container = document.getElementById('formatsContainer');
    container.innerHTML = '';
    
    formats.forEach(format => {
        const badge = document.createElement('span');
        badge.className = 'badge bg-primary me-2';
        badge.innerHTML = `${format} <button type="button" class="btn-close btn-close-white" aria-label="Remove"></button>`;
        
        badge.querySelector('.btn-close').addEventListener('click', function() {
            badge.remove();
            // 启用保存按钮
            document.getElementById('saveSettings').disabled = false;
        });
        
        container.appendChild(badge);
    });
}

/**
 * 初始化比例滑块
 */
function initRatioSlider() {
    const ratio = document.getElementById('ratio');
    const ratioValue = document.getElementById('ratioValue');
    
    ratio.addEventListener('input', function() {
        ratioValue.textContent = this.value + '%';
    });
}

/**
 * 初始化按钮
 */
function initButtons() {
    // 保存按钮
    const saveButton = document.getElementById('saveSettings');
    saveButton.addEventListener('click', saveSettings);
    
    // 重置按钮
    const resetButton = document.getElementById('resetSettings');
    resetButton.addEventListener('click', function() {
        const modal = new bootstrap.Modal(document.getElementById('confirmResetModal'));
        modal.show();
    });
    
    // 确认重置按钮
    const confirmResetButton = document.getElementById('confirmResetButton');
    confirmResetButton.addEventListener('click', resetSettings);
}

/**
 * 保存设置
 */
async function saveSettings() {
    try {
        const settings = {
            语言: document.getElementById('language').value,
            主题: document.getElementById('theme').value,
            摘要: {
                算法: document.getElementById('algorithm').value,
                默认比例: parseFloat(document.getElementById('ratio').value) / 100,
                关键词数量: parseInt(document.getElementById('keywordsCount').value)
            },
            文档: {
                最大大小: parseInt(document.getElementById('maxFileSize').value),
                支持格式: getCurrentFormats()
            },
            历史: {
                自动保存: document.getElementById('autoSave').checked,
                最大数量: parseInt(document.getElementById('maxCount').value)
            },
            web: {
                主机: document.getElementById('host').value,
                端口: parseInt(document.getElementById('port').value)
            }
        };
        
        const response = await fetch('/api/settings', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(settings)
        });
        
        const data = await response.json();
        
        if (data.success) {
            currentSettings = settings;
            showSuccess('设置已保存');
            
            // 禁用保存按钮
            document.getElementById('saveSettings').disabled = true;
            
            // 如果语言或主题发生变化，提示需要刷新
            if (settings.语言 !== currentSettings.语言 || settings.主题 !== currentSettings.主题) {
                if (confirm('设置已保存。需要刷新页面以应用新的语言或主题设置，是否立即刷新？')) {
                    window.location.reload();
                }
            }
        } else {
            throw new Error(data.error || '保存设置失败');
        }
    } catch (error) {
        console.error('保存设置错误:', error);
        showError(error.message);
    }
}

/**
 * 重置设置
 */
async function resetSettings() {
    try {
        const response = await fetch('/api/settings/reset', {
            method: 'POST'
        });
        
        const data = await response.json();
        
        if (data.success) {
            // 关闭确认模态框
            const modal = bootstrap.Modal.getInstance(document.getElementById('confirmResetModal'));
            modal.hide();
            
            // 重新加载设置
            await loadSettings();
            
            showSuccess('设置已重置为默认值');
            
            // 禁用保存按钮
            document.getElementById('saveSettings').disabled = true;
            
            // 提示需要刷新
            if (confirm('设置已重置为默认值。需要刷新页面以应用新设置，是否立即刷新？')) {
                window.location.reload();
            }
        } else {
            throw new Error(data.error || '重置设置失败');
        }
    } catch (error) {
        console.error('重置设置错误:', error);
        showError(error.message);
    }
}